#!/usr/bin/env python
import pika, sys, os

def main():
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
    channel = connection.channel()
    #queue可能不存在，需要创建，当已经创建之后即使执行该命令也不会重复创建
    channel.queue_declare(queue='hello')

    def callback(ch, method, properties, body):
        print(" [x] Received %r" % body)
    # Sends the AMQP command Basic.Consume to the broker and binds messages for the consumer_tag to the consumer callback. 
    # If you do not pass in a consumer_tag, one will be automatically generated for you. Returns the consumer tag.
    channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)

    print(' [*] Waiting for messages. To exit press CTRL+C')
    # Processes I/O events and dispatches timers and basic_consume callbacks until all consumers are cancelled.
    channel.start_consuming()

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print('Interrupted')
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)